package com.example.ffepeg.ffeAdder;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

public class PunctuationReplacerFiles {
    public static String replaceChinesePunctuation(String input) {
        if (input == null) return null;
        // 替换中文标点符号为英文标点符号
        input = input.replace("，", ",");  // 中文逗号 -> 英文逗号
        input = input.replace("。", ".");  // 中文句号 -> 英文句号
        input = input.replace("！", "!");  // 中文感叹号 -> 英文感叹号
        input = input.replace("？", "?");  // 中文问号 -> 英文问号
        input = input.replace("；", ";");  // 中文分号 -> 英文分号
        input = input.replace("、", ",");  // 中文顿号 -> 英文逗号
        input = input.replace("：",":");   // 中文冒号 -> 英文冒号
        input = input.replace("‘","");
        input = input.replace("’","");
        input = input.replace("”","");
        input = input.replace("“","");

        // 可以继续添加其他需要替换的标点符号
        String withoutSpeakTags = input.replaceAll("<speak>|</speak>", "");
        String cleanText = withoutSpeakTags.replaceAll("<break time='\\d+ms'/>", "");
        return cleanText;
    }

    public static List<String> splitStringToListPoem(String poem){
        String delimiter = "[，、。,.;!?\\s]+"; // 匹配中英文标点符号及空白字符
        // 使用split()方法分割字符串
        String[] splitArray = poem.split(delimiter);
        // 将数组转换为列表并去除可能存在的空字符串
        List<String> list = new ArrayList<>();
        for (String item : splitArray) {
            if (!item.trim().isEmpty()) { // 忽略空项
                list.add(item.trim());
            }
        }
        return list;
    }

    public static Path directoryCheck(String directoryPath,String pngFileName){
        Path pngFilePath = Paths.get(directoryPath, pngFileName);
        try {
            Files.createFile(pngFilePath);
            System.out.println("PNG File: " + pngFilePath.toAbsolutePath());
            return pngFilePath.toAbsolutePath();
        } catch (IOException e) {
            throw new RuntimeException("文件创建失败");
        }
    }

    private void clearSRTFile(String file){
        try {
            Files.write(Paths.get(file), "".getBytes());
            System.out.println("清空example.srt文件成功");
        } catch (IOException e) {
            throw new RuntimeException("清空example.srt文件失败");
        }
    }

  /*  public static void deleteFileContent(String path) {
        File pngPath = new File(path);
        if (pngPath.exists()) {
            boolean isDeleted = pngPath.delete();
            if (isDeleted) {
                System.out.println("logo文件删除成功");
            } else {
                System.out.println("logo文件删除失败");
            }
        } else {
            System.out.println("logo文件不存在");
        }
    }*/

    //删除单个文件
    public static void deleteFileContent(String path) {
        File filePath = new File(path);
        // 检查文件是否存在且是一个文件而不是目录
        if (filePath.exists() && filePath.isFile()) {
            boolean isDeleted = filePath.delete();
            if (isDeleted) {
                System.out.println("文件删除成功");
            } else {
                System.out.println("文件删除失败");
            }
        } else if (!filePath.exists()) {
            System.out.println("文件不存在");
        } else {
            System.out.println("无法删除，指定路径是一个文件夹而非文件");
        }
    }

    //删除多个文件内容以及当前文件夹
    public static String deleteFile(String path){
        // 目标文件夹的路径
        File directory = new File(path);
        // 检查文件夹是否存在
        if (!directory.exists()) {
            return "文件夹不存在";
        }
        // deleteDirectory方法删除文件夹及其内容
        if (deleteDirectory(directory)) {
            return "文件夹成功删除";
        } else {
            throw new RuntimeException("文件夹删除失败");
        }
    }
    public static boolean deleteDirectory(File directory) {
        if (directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    deleteDirectory(file);
                }
            }
        }
        return directory.delete();
    }

    //删除多个文件内容
    public static String deleteFilesInDirectory(String path) {
        // 目标文件夹的路径
        File directory = new File(path);
        // 检查文件夹是否存在
        if (!directory.exists() || !directory.isDirectory()) {
            return "文件夹不存在或不是有效的目录";
        }
        // deleteFiles方法删除文件夹内的文件
        if (deleteFiles(directory)) {
            return "文件夹内的文件成功删除";
        } else {
            throw new RuntimeException("文件夹内的文件删除失败");
        }
    }
    public static boolean deleteFiles(File directory) {
        boolean success = true;
        if (directory.isDirectory()) {
            File[] files = directory.listFiles();
            if (files != null) {
                for (File file : files) {
                    // 如果是文件，则删除；如果是文件夹，则递归调用但不删除该文件夹本身
                    if (file.isFile()) {
                        if (!file.delete()) {
                            success = false;
                        }
                    } else if (file.isDirectory()) {
                        // 递归调用，但是我们不会尝试删除这个子目录
                        deleteFiles(file);
                    }
                }
            }
        }
        return success;
    }

    //创建文件 返回src/java/
    public String createDirectoryAndCheckFile(String directoryPath, String createFileName) {
        // 生成唯一的文件名部分
        String uniquePart = UUID.randomUUID().toString().replaceAll("-", "") + System.currentTimeMillis();
        Path dirPath = Paths.get(directoryPath);
        Path pngFilePath = dirPath.resolve(uniquePart + createFileName);
        try {
            // 确保目录存在
            Files.createDirectories(dirPath);
            System.out.println("目录已创建或已经存在: " + dirPath);

            // 检查文件是否存在，若不存在则创建
            if (!Files.exists(pngFilePath)) {
                Files.createFile(pngFilePath);
                System.out.println("文件创建成功: " + pngFilePath);
            } else {
                System.out.println("文件已存在: " + pngFilePath);
            }
            // 返回带有正斜杠的相对路径字符串
            return pngFilePath.toString().replace(File.separator, "/");
        } catch (Exception e) {
            System.out.println("创建文件失败: " + pngFilePath+ "   错误为: "+ e);
            throw new RuntimeException("无法创建文件，请检查路径和文件名是否正确");
        }
    }

    private static List<String> getTimeBegEnd(List<LiustTiles> wordsList,int beg, int end){
        // System.out.println("开始值为: "+beg + "  结束值为: "+ end);
        List<String> begEndStrList = new ArrayList<>();
        for (int i = 0; i < wordsList.size(); i++) {
            LiustTiles listTiles = wordsList.get(beg);
            String strBeg = listTiles.getBeg();
            begEndStrList.add(strBeg);
            LiustTiles listWords = wordsList.get(end-1);
            String strEnd = listWords.getEnd();
            begEndStrList.add(strEnd);
            if (i<end) break;
        }
        return begEndStrList;
    }


    //获取英文符号的总个数
    private static int count(String text){
        long count = text.chars()
                .filter(c -> ",.?!;:".indexOf(c) != -1)  //可以继续添加符号
                .count();
        System.out.println("特殊字符总数：" + count);
        return (int) count;
    }

    public static void main(String[] args) {
      /*  String url = "src/main/resources/file/filespath/";
        String string = deleteFilesInDirectory(url);
        System.out.println(string);*/

        //分割字符
       // String text = "<speak>北方的风光，<break time='400ms'/>千万里#冰封冻，千万%里雪花飘。<break time='400ms'/>远望长城内外，只剩下无边无际白茫茫一片；宽广的黄河上下，顿时失去了滔滔水势。山岭好像银白色的蟒蛇在飞舞，高原上的丘陵好像许多白象在奔跑，它们都想试一试与老天爷比比高。要等到晴天的时候，看红艳艳的阳光和白皑皑的冰雪交相辉映，分外美好。江山如此媚娇，引得无数英雄竞相倾倒。只可惜秦始皇汉武帝，略差文学才华；唐太宗宋太祖，稍逊文治功劳。称雄一世的人物，成吉思汗，只知道拉弓射大雕。这些人物全都过去了，数一数能建功立业的英雄人物，还要看今天的人们。毛泽东词是中国革命的史诗，是中华诗词海洋中的一朵奇葩。《沁园春雪》更被南社盟主柳亚子盛赞为千古绝唱。这首词一直是众人的最爱，每次读来都仿佛又回到了那个战火纷飞的年代，磅礴的气势深远的意境广阔的胸怀。 </speak>";
        String text = "怒发冲冠，凭栏处、潇潇雨歇。";
        //怒发冲冠，凭栏处、潇潇雨歇。抬望眼、仰天长啸，壮怀激烈。三十功名尘与土，八里路云和月。莫等闲、白了少年头，空悲切。靖康耻，犹未雪。臣子恨，何时灭。驾长车，踏破贺兰山缺。壮志饥餐胡虏肉，笑谈渴饮匈奴血。待从头、收拾旧山河，朝天阙。
        String replaceAllText = text.replaceAll("[#$%]", "");
        //System.out.println("replaceAllText数据为: "+replaceAllText);
        String chinesePunctuation = replaceChinesePunctuation(replaceAllText);
       // System.out.println("chinesePunctuation数据为: "+chinesePunctuation);
        List<String> list = splitStringToListPoem(chinesePunctuation);
        //System.out.println("list数据为: "+list);

        String originalString = "Hello, 你|好！Wor\\ld? 12/3￥%……&, 《沁园春雪》更被南"+"社"+"盟主'柳'亚子盛~赞为·千·古`绝`唱";
        // 使用replaceAll方法，通过正则表达式匹配所有非字母、非汉字、非数字字符，并将其替换为空字符串
        String cleanedString = originalString.replaceAll("[^\\p{L}\\p{Nd}]", "");
        System.out.println(cleanedString);


      /*  List<LiustTiles> tilesList = new ArrayList<>();
        tilesList.add(new LiustTiles("0","1","怒"));
        tilesList.add(new LiustTiles("2","3","发"));
        tilesList.add(new LiustTiles("4","5","冲"));
        tilesList.add(new LiustTiles("6","7","冠"));

        tilesList.add(new LiustTiles("8","9","凭"));
        tilesList.add(new LiustTiles("10","11","栏"));
        tilesList.add(new LiustTiles("12","13","处"));

        tilesList.add(new LiustTiles("14","15","潇"));
        tilesList.add(new LiustTiles("16","17","潇"));
        tilesList.add(new LiustTiles("18","19","雨"));
        tilesList.add(new LiustTiles("20","21","歇"));

        int sum = 0;
        int til = 0;
        Map<Integer,List<String>> map = new HashMap<>(); //结果集合
        for (int k = 0; k < list.size(); k++) {
            int length =list.get(k).length();
            for (int j = 0; j < length; j++) {
                char strAt = list.get(k).charAt(j);
                //System.out.println(strAt);
                sum++;
                //System.out.println("sum的值为: "+sum);
            }

            List<String> timeBegEnd = getTimeBegEnd(tilesList, til, sum);
            til = sum;
            //System.out.println("til的值为: "+til);
            //System.out.println(timeBegEnd);
            map.put(k,timeBegEnd);
        }

        for (int r = 0; r < list.size(); r++) {
            List<String> listMap = map.get(r);
            System.out.println("数据为: "+listMap);
            System.out.println("key值为: "+listMap.get(0));
            System.out.println("value值为: "+listMap.get(1));
        }
*/

        //创建文件
       /* String filePath = "src/main/resources/file/filespaths/";
        String subtitleFiles = "files.srt";
        String andCheckFile = createDirectoryAndCheckFile(filePath, subtitleFiles);
        System.out.println(andCheckFile);*/

    }

}
